Dagger 是 Google 維護的 Java、Kotlin 和 Android 的熱門依附元件插入程式庫。
Dagger的創立並且發布者是Square
另外相似的Dependency Injection
功能也是Google發布的Guice
因為前面有提到何謂Dependency Injection(DI)
的概念,這邊就在總結一下DI的好處:
Implementing dependency injection provides you with the following advantages:
這邊註解標籤大致都與常見的 Dependency Injection(DI) 一致。
@Provides
標記的方法,通常會有一個一般的 類別(Class) 對應 Module,如下圖:Double-checked locking(雙重檢查鎖定模式)
的方式來檢查是否有被初始化過。
這邊創建一個工人,若沒有加上@Singleton
註解標籤,log出來的結果會是兩個不同的人物。
加上@Singleton
標籤註解之後,所顯示的Log結果是同一個人物。
創造一個靜態的特殊 method,呼叫這個方法時,先檢查物件是否已被實體化,若已被實體化,直接回傳該物件的一個參照;尚未被實體化的話,就回傳一個新實體的參照。
@Named
大致使用方式:可將其註解在方法或是引入值。
可以用於以下幾個情況:
@Module
注釋的方法上,用於指定Method
提供的對象名稱。@Component
注釋的構造器方法上,用於指定將使用哪個 @Module
注釋的方法提供的對象。@Binds
中文直譯:綁定;綑綁
@Binds
注釋必須用於抽象方法上,並且方法必須返回指定的類型。此外,該方法必須位於Module
的抽象類別中。Class
,無法同時輸出多個結果,要同時輸出多個結果必須使用@Provides
註解。以上有了這些前置基礎概念後,明天就要開始撰寫Dagger2的程式碼了。